package edu.ynu.se.xiecheng.achitectureclass.common.controller;

import edu.ynu.se.xiecheng.achitectureclass.common.service.ImageDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

// 标注为一个 Spring REST 控制器，负责处理与图片数据相关的 HTTP 请求
@RestController
@RequestMapping("/api/image-data") // 定义 API 的基础路径
public class ImageDataController {

    // 自动注入 ImageDataService 服务层
    @Autowired
    private ImageDataService imageDataService;

    /**
     * 处理图片数据的获取和保存请求
     *
     * 1. 请求方法：POST
     * 2. URL: /api/image-data/fetch-and-save
     *
     * **设计模式：**
     * - **控制器-服务模式 (Controller-Service Pattern)**：
     *   控制器负责接收请求并将其委托给服务层处理。
     *
     * **设计原则：**
     * - **单一职责原则 (SRP)**：控制器仅负责请求和响应的处理。
     * - **错误处理原则 (Error Handling)**：使用 try-catch 块捕获异常并返回适当的 HTTP 错误状态。
     * - **依赖注入 (DI)**：通过 @Autowired 将服务层依赖注入控制器。
     *
     * @return 成功时返回图片 URL 保存成功的消息；失败时返回错误信息。
     */
    @PostMapping("/fetch-and-save")
    public ResponseEntity<String> fetchAndSaveImageData() {
        try {
            // 从 API 获取图片的 URL
            String picUrl = imageDataService.callApiAndFetchPicUrl();

            // 保存图片 URL 到数据库
            imageDataService.savePicUrl(picUrl);

            // 返回成功响应
            return ResponseEntity.ok("Picture URL fetched and saved successfully: " + picUrl);
        } catch (Exception e) {
            // 返回失败响应，包含错误信息
            return ResponseEntity.status(500).body("Error: " + e.getMessage());
        }
    }
}
